import axios from 'axios';
import { ElMessage } from 'element-plus';
import { useAuthStore } from '@/stores';

// 创建axios实例
const http = axios.create({
  baseURL: (import.meta.env.VITE_API_BASE || 'http://localhost:8000/api'),
  timeout: 1000*15,
  headers: {
    'Content-Type': 'application/json'
  }
});

// 请求拦截器
http.interceptors.request.use(
  config => {
    const store = useAuthStore();
    if (store.token) {
      console.log(`请求拦截器: 设置 Authorization 头 Bearer ${store.token.substring(0, 10)}...`);
      config.headers.Authorization = `Bearer ${store.token}`;
      // 如果没有手动设置 Content-Type，使用默认值
      if (!config.headers['Content-Type']) {
        config.headers['Content-Type'] = 'application/json';
      }
    } else {
      console.log('请求拦截器: 没有 token，不设置 Authorization 头');
    }
    
    // 移除URL中的重复 /api 前缀
    // if (config.url.startsWith('/api/')) {
    //   config.url = config.url.substring(4);
    // }
    
    console.log(`请求拦截器: ${config.method.toUpperCase()} ${config.url}`);
    return config;
  },
  error => {
    console.error('请求拦截器错误:', error);
    return Promise.reject(error);
  }
);

// 响应拦截器
http.interceptors.response.use(
  response => {
    const res = response.data;
    // 根据后端统一返回格式处理响应
    console.log(`HTTP响应数据:`, res);
    
    if (res.code !== 200) {
      console.error(`请求失败: 状态码=${res.code}, 消息=${res.msg}`);
      ElMessage.error(res.msg || '请求失败');
      
      // 401: 未授权，token无效或过期
      if (res.code === 401) {
        handleUnauthorized();
      }
      
      return Promise.reject(new Error(res.msg || '请求失败'));
    } else {
      console.log('请求成功，返回数据:', res.data);
      return res.data; // 直接返回数据部分
    }
  },
  error => {
    // 处理HTTP错误状态码
    console.error('HTTP请求错误:', error);
    const response = error.response;
    
    // 处理401未授权错误
    if (response?.status === 401) {
      handleUnauthorized();
      return Promise.reject(error);
    }
    
    // 处理其他HTTP错误
    if (response && response.data) {
      ElMessage.error(response.data.msg || '请求失败');
    } else {
      ElMessage.error(error.message || '网络错误');
    }
    
    return Promise.reject(error);
  }
);

// 处理未授权情况
const handleUnauthorized = () => {
  console.warn('认证失败: 清除认证信息并跳转到登录页');
  const authStore = useAuthStore();
  authStore.logout();
  
  // 如果当前不在登录页，则跳转到登录页
  if (window.location.pathname !== '/login') {
    window.location.href = '/login';
  }
};

export default http; 

